package com.hose.pages;

import cn.hutool.core.util.StrUtil;
import com.hose.util.HoseUtils;
import com.microsoft.playwright.Locator;
import com.microsoft.playwright.Page;

/**
 * 合思 +
 */
public class ExpenseCenterNewPage {
    private Page page;

    private ExpenseCenterNewPage(Page page) {
        this.page = page;
    }

    public static ExpenseCenterNewPage build(Page page) {
        return new ExpenseCenterNewPage(page);
    }

    /**
     * 创建自定义应用，有则直接返回     *
     * @param applicationName
     * @return
     */
    public ExpenseCenterNewPage createCustomApplicaiton(String applicationName) {

//        this.goHome();
//        boolean exists = this.existsApp(applicationName);
//        if (exists) {
//            return this;
//        }

        // Click button:has-text("创建应用")
        page.frameLocator("#layout iframe").locator("button:has-text(\"创建应用\")").click();

        // Click [placeholder="请输入应用名称（至多20字）"]
        page.frameLocator("#layout iframe").locator("[placeholder=\"请输入应用名称（至多20字）\"]").click();

        // Fill [placeholder="请输入应用名称（至多20字）"]
        page.frameLocator("#layout iframe").locator("[placeholder=\"请输入应用名称（至多20字）\"]").fill(applicationName);

        // Click textarea
        page.frameLocator("#layout iframe").locator("textarea").click();

        // Fill textarea
        page.frameLocator("#layout iframe").locator("textarea").fill(applicationName);

        // Click text=应用图标
        page.frameLocator("#layout iframe").locator("text=应用图标").click();

        // Click button:has-text("确认创建")
        page.frameLocator("#layout iframe").locator("button:has-text(\"确认创建\")").click();

        HoseUtils.wait(page);

        return this;
    }

    /**
     * 进入合思+ 页面     *
     * @return
     */
    public ExpenseCenterNewPage goHome() {
        if (StrUtil.contains(page.url(), "expense-center-new")) {
            return this;
        }
        // Click text=合思+
        page.locator("text=合思+").click();
        HoseUtils.wait(page);
        return this;
    }


    /**
     * 查自建应用是否存在, 依赖：进入合思+ 方法 goHome()
     * @return
     */
    public boolean seachApplication(String applicationName) {

        Locator locator = page.frameLocator("#layout iframe").locator("//*[text()='自建应用']/../../img");

        if (!locator.isVisible()) {
            // Click text=自建应用
            page.frameLocator("#layout iframe").locator("text=自建应用").click();

            HoseUtils.wait(this.page);
        }

        // Click [placeholder="请输入应用名称或描述"]
        page.frameLocator("#layout iframe").locator("[placeholder=\"请输入应用名称或描述\"]").click();

        // Fill [placeholder="请输入应用名称或描述"]
        page.frameLocator("#layout iframe").locator("[placeholder=\"请输入应用名称或描述\"]").fill(applicationName);

        // Click [aria-label="图标\:\ search"] svg
        page.frameLocator("#layout iframe").locator("[aria-label=\"图标\\:\\ search\"] svg").click();

        HoseUtils.wait(page);

        // t1669942700818
        Locator locator2 = page.frameLocator("#layout iframe").locator("(//*[@class='self_built_apps_list_item']//*[text()='" + applicationName + "'])[1]");
        /**
         * 如果存在，则不再创建
         */
        if (locator2.isVisible()) {
            return true;
        }
        return false;
    }


    public ExpenseCenterNewPage enterApplication(String applicationName) {
        this.seachApplication(applicationName);

        page.frameLocator("#layout iframe").locator("(//*[@class='self_built_apps_list_item']//*[text()='" + applicationName + "'])[1]").click();

        return this;
    }
}
